﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;
using System.Drawing.Drawing2D;
using System.IO;

namespace Paint
{
    class Control
    {
        public int x1, y1, x2, y2;//lưu giá trị điểm đầu và điểm cuối
        public int d1, d2;//d1:khoảng cách |x1-x2|; d2:khoảng cách |y1-y2|
        public int func=0;// cho biết chức năng mà người dùng đã chọn(0-chưa chọn chức năng)
        public Graphics g;
        public Pen p;//viết vẽ
        public bool draw = false;//biến dùng cho quá trình vẽ 1: vẽ; 0: không vẽ
        public Bitmap bm;
        //public Size fullsize;
        public ArrayList ListOfPoint;
        public SolidBrush sb;//chổi vẽ và tô, mặc định là màu đen, là phần 'ngòi' của viết vẽ pen
        public int weight;//độ dày của nét vẽ       
      
        //public Bitmap new_bitmap;
        //ToMau fc = new ToMau();
        
        public Control()
        {
            ListOfPoint = new ArrayList();
            sb = new SolidBrush(Color.Black);
            weight = 1;
            p = new Pen(sb,weight); 
        }      

        public void Ve(Graphics gp)
        {
            g = gp;
            g.SmoothingMode = SmoothingMode.HighQuality;//làm cho nét vẽ mịn hơn
            int n = ListOfPoint.Count;
            Point[] a = new Point[n];
            for (int i = 0; i < n; i++)
            {
                a[i].X = ((Point)ListOfPoint[i]).X;
                a[i].Y = ((Point)ListOfPoint[i]).Y;
            }  
            switch (func)
            {
                case 1:
                    if (a.Length == 2)
                    {
                        g.SmoothingMode = SmoothingMode.Default;
                        g.FillRectangle(sb, a[0].X, a[0].Y,1,1);
                    }
                    else
                    {
                        g.DrawCurve(p, a);
                    }
                    break;
                case 2:
                    //fc.FloodFill(bm, a[0].X, a[0].Y, p.Color);
                    break;
                case 5:
                    g.DrawLine(p, new Point(x1, y1), new Point(x2, y2));
                    break;
                case 6:
                    d1 = Math.Abs(x1 - x2);
                    d2 = Math.Abs(y1 - y2);
                    g.DrawEllipse(p, Math.Min(x1, x2), Math.Min(y1, y2), d1, d2);  
                    break;
                case 7:
                    d1 = Math.Abs(x1 - x2);
                    d2 = Math.Abs(y1 - y2);
                    if (x2 > x1)
                    {
                        if (y2 > y1)
                        {
                            g.DrawRectangle(p, x1, y1, d1, d1);
                        }
                        else //y2 <= y1
                        {
                            g.DrawRectangle(p, x1, y1 - d2, d2, d2);
                        }
                    }
                    else if (x2 <= x1)
                    {
                        if (y2 > y1)
                        {
                            g.DrawRectangle(p, x1 - d1, y2 - d2, d1, d1);
                        }
                        else //y2 <= y1
                        {
                            g.DrawRectangle(p, x1 - d1, y1 - d1, d1, d1);
                        }
                    }
                    break;
                case 8:
                    d1 = Math.Abs(x1 - x2);
                    d2 = Math.Abs(y1 - y2);
                    g.DrawRectangle(p, Math.Min(x1,x2), Math.Min(y1,y2), d1, d2);
                    break;
                case 100:
                    //VC.Draw(g);
                    break;
            }            
        }
        public void MauChu(Color c)
        {
            sb = new SolidBrush(c);
            p = new Pen(c, weight);
        }
        public void KichCoNetVe(int w)
        {
           // sb = new SolidBrush(w);
            weight = w;
            p = new Pen(sb, weight);
        }
        public void LoadConfig(ref int Weight, ref string FontName, ref int FontSize, ref SolidBrush Sb)
        {
            StreamReader sr = File.OpenText(Application.StartupPath+"\\config\\profile.txt");
            Weight = int.Parse(sr.ReadLine());
            FontSize = int.Parse(sr.ReadLine());
            FontName = sr.ReadLine();
            Sb = new SolidBrush(Color.FromName(sr.ReadLine()));
            sr.Close();
        }
        public void SaveConfig(int Weight, String FontName,int Size , String ColorName)
        {
            StreamWriter sw = new StreamWriter(Application.StartupPath + "\\config\\Profile.txt");
            sw.WriteLine(Weight);
            sw.WriteLine(Size);
            sw.WriteLine(FontName);            
            sw.WriteLine(ColorName);
            sw.Close();
        }
    }
}
